/**
 * @description 深克隆
 * @param {} obj 需要深克隆的值
 */
function deepClone(obj) {
  // 过滤特殊情况
  if (obj === null) return null
  if (typeof obj !== 'object') return obj
  if (obj instanceof RegExp) {
    return new RegExp(obj)
  }
  if (obj instanceof Date) {
    return new Date(obj)
  }
  if (obj instanceof Function) {
    return new Function(obj)
  }
  // let newObj = {}
  // let newObj = new Object()
  // 不直接创建空对象目的：克隆的结果和之前保持相同的所属类
  let newObj = new obj.constructor()
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      newObj[key] = deepClone(obj[key])
    }
  }
  return newObj
}
